import { marked } from 'marked'

// 配置marked选项
marked.setOptions({
  breaks: true, // 将换行符转换为<br>
  gfm: true, // 启用GitHub风格的Markdown
  sanitize: false, // 不进行HTML转义，允许HTML标签
  headerIds: true, // 为标题添加id
  highlight: function (code, language) {
    // 这里可以添加代码高亮功能
    // 目前仅返回原始代码
    return code
  }
})

/**
 * 渲染Markdown内容为HTML
 * @param {string} markdown - Markdown格式的内容
 * @returns {string} 渲染后的HTML内容
 */
export function renderMarkdown(markdown) {
  if (!markdown || typeof markdown !== 'string') {
    return ''
  }
  return marked(markdown)
}

/**
 * 从Markdown内容中提取纯文本（去除Markdown格式）
 * @param {string} markdown - Markdown格式的内容
 * @returns {string} 提取的纯文本内容
 */
export function extractTextFromMarkdown(markdown) {
  if (!markdown || typeof markdown !== 'string') {
    return ''
  }
  // 简单的Markdown格式去除
  const plainText = markdown
    .replace(/#{1,6}\s+/g, '') // 去除标题
    .replace(/\*\*|__/g, '') // 去除加粗
    .replace(/\*|_/g, '') // 去除斜体
    .replace(/`{1,3}[\s\S]*?`{1,3}/g, '') // 去除代码块
    .replace(/^>\s+/gm, '') // 去除引用
    .replace(/^[-+*]\s+/gm, '') // 去除列表项
    .replace(/^\d+\.\s+/gm, '') // 去除有序列表
    .replace(/!\[(.*?)\]\((.*?)\)/g, '$1') // 去除图片，但保留alt文本
    .replace(/\[(.*?)\]\((.*?)\)/g, '$1') // 去除链接，但保留链接文本
    .replace(/^-{3,}$/gm, '') // 去除分割线
    .replace(/\n{2,}/g, '\n') // 合并多个空行
    .trim()
  
  return plainText
}

/**
 * 从Markdown内容中提取摘要
 * @param {string} markdown - Markdown格式的内容
 * @param {number} length - 摘要长度
 * @returns {string} 提取的摘要内容
 */
export function extractExcerptFromMarkdown(markdown, length = 150) {
  const plainText = extractTextFromMarkdown(markdown)
  return plainText.length > length ? plainText.substring(0, length) + '...' : plainText
}